package src.CodeTop;

import java.util.Arrays;

/**
 * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 *
 * 示例:
 *
 * 输入: [0,1,0,3,12]
 * 输出: [1,3,12,0,0]
 *
 */

public class _283MoveZeroes {
    public static void main(String[] args) {
        int[] nums1 = {0, 1, 0, 3, 12};
        int[] nums2 = {1, 0, 1};
        moveZeroes(nums2);
        System.out.println(Arrays.toString(nums2));
    }

    public static void moveZeroes(int[] nums) {
        // 校验合法性
        if (nums.length == 0 || nums.length == 1)
            return;
        // 定义双指针
        int left = 0, right = 0;
        // 双指针循环遍历，当右指针遍历结束时退出循环
        while (right < nums.length) {
            // 若右指针元素不等于0
            if (nums[right] != 0){
                //交换0与非0元素
                swap(nums, left, right);
                //指针后移
                left++;
            }
            //指针后移
            right++;
        }
    }

    public static void swap(int[] nums, int left, int right) {
        int temp = nums[left];
        nums[left] = nums[right];
        nums[right] = temp;
    }
}
